// noinspection JSUnresolvedReference
/**
* Field Google Map
*/
/* global jQuery, document, redux_change, redux, google */
(function ( $ ) {
'use strict';
redux.field_objects = redux.field_objects || {};
redux.field_objects.google_maps = redux.field_objects.google_maps || {};
/* LIBRARY INIT */
redux.field_objects.google_maps.init = function ( selector ) {
if ( ! selector ) {
selector = $( document ).find( '.redux-group-tab:visible' ).find( '.redux-container-google_maps:visible' );
}
$( selector ).each(
function ( i ) {
let delayRender;
const el = $( this );
let parent = el;
if ( ! el.hasClass( 'redux-field-container' ) ) {
parent = el.parents( '.redux-field-container:first' );
}
if ( parent.is( ':hidden' ) ) {
return;
}
if ( parent.hasClass( 'redux-field-init' ) ) {
parent.removeClass( 'redux-field-init' );
} else {
return;
}
// Check for delay render, which is useful for calling a map
// render after JavaScript load.
delayRender = Boolean( el.find( '.redux_framework_google_maps' ).data( 'delay-render' ) );
// API Key button.
redux.field_objects.google_maps.clickHandler( el );
// Init our maps.
redux.field_objects.google_maps.initMap( el, i, delayRender );
}
);
};
/* INIT MAP FUNCTION */
redux.field_objects.google_maps.initMap = async function ( el, idx, delayRender ) {
let delayed;
let scrollWheel;
let streetView;
let mapType;
let address;
let defLat;
let defLong;
let defaultZoom;
let mapOptions;
let geocoder;
let g_autoComplete;
let g_LatLng;
let g_map;
let noLatLng = false;
// Pull the map class.
const mapClass = el.find( '.redux_framework_google_maps' );
const containerID = mapClass.attr( 'id' );
const autocomplete = containerID + '_autocomplete';
const canvas = containerID + '_map_canvas';
const canvasId = $( '#' + canvas );
const latitude = containerID + '_latitude';
const longitude = containerID + '_longitude';
// Add map index to data attr.
// Why, say we want to use delay_render,
// and want to init the map later on.
// You'd need the index number in the
// event of multiple map instances.
// This allows one to retrieve it
// later.
$( mapClass ).attr( 'data-idx', idx );
if ( true === delayRender ) {
return;
}
// Map has been rendered, no need to process again.
if ( $( '#' + containerID ).hasClass( 'rendered' ) ) {
return;
}
// If a map is set to delay render and has been initiated
// from another scrip, add the 'render' class so rendering
// does not occur.
// It messes things up.
delayed = Boolean( mapClass.data( 'delay-render' ) );
if ( true === delayed ) {
mapClass.addClass( 'rendered' );
}
// Create the autocomplete object, restricting the search
// to geographical location types.
g_autoComplete = await google.maps.importLibrary( 'places' );
g_autoComplete = new google.maps.places.Autocomplete( document.getElementById( autocomplete ), {types: ['geocode']} );
// Data bindings.
scrollWheel = Boolean( mapClass.data( 'scroll-wheel' ) );
streetView = Boolean( mapClass.data( 'street-view' ) );
mapType = Boolean( mapClass.data( 'map-type' ) );
address = mapClass.data( 'address' );
address = decodeURIComponent( address );
address = address.trim();
// Set default Lat/lng.
defLat = canvasId.data( 'default-lat' );
defLong = canvasId.data( 'default-long' );
defaultZoom = canvasId.data( 'default-zoom' );
// Eval whether to set maps based on lat/lng or address.
if ( '' !== address ) {
if ( '' === defLat || '' === defLong ) {
noLatLng = true;
}
} else {
noLatLng = false;
}
// Can't have empty values, or the map API will complain.
// Set default for the middle of the United States.
defLat = defLat ? defLat : 39.11676722061108;
defLong = defLong ? defLong : -100.47761000000003;
if ( noLatLng ) {
// If displaying a map based on an address.
geocoder = new google.maps.Geocoder();
// Set up Geocode and pass address.
geocoder.geocode(
{'address': address},
function ( results, status ) {
let latitude;
let longitude;
// Function results.
if ( status === google.maps.GeocoderStatus.OK ) {
// A good address was passed.
g_LatLng = results[0].geometry.location;
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom,
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
// Get and set lat/long data.
latitude = el.find( '#' + containerID + '_latitude' );
latitude.val( results[0].geometry.location.lat() );
longitude = el.find( '#' + containerID + '_longitude' );
longitude.val( results[0].geometry.location.lng() );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
} else {
// No data found, alert the user.
alert( 'Geocode was not successful for the following reason: ' + status );
}
}
);
} else {
// If displaying map based on an lat/lng.
g_LatLng = new google.maps.LatLng( defLat, defLong );
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom, // Start off far unless an item is selected, set by php.
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create the map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
}
};
redux.field_objects.google_maps.renderControls = function ( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ) {
let markerTooltip;
let infoWindow;
let g_marker;
let geoAlert = mapClass.data( 'geo-alert' );
// Get HTML.
const input = document.getElementById( autocomplete );
// Set objects into the map.
g_map.controls[google.maps.ControlPosition.TOP_LEFT].push( input );
// Bind objects to the map.
g_autoComplete = new google.maps.places.Autocomplete( input );
g_autoComplete.bindTo( 'bounds', g_map );
// Get the marker tooltip data.
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Create infoWindow.
infoWindow = new google.maps.InfoWindow();
// Create marker.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
draggable: true,
title: markerTooltip,
animation: google.maps.Animation.DROP
}
);
geoAlert = decodeURIComponent( geoAlert );
// Place change.
google.maps.event.addListener(
g_autoComplete,
'place_changed',
function () {
let place;
let address;
let markerTooltip;
infoWindow.close();
// Get place data.
place = g_autoComplete.getPlace();
// Display alert if something went wrong.
if ( ! place.geometry ) {
window.alert( geoAlert );
return;
}
console.log( place.geometry.viewport );
// If the place has a geometry, then present it on a map.
if ( place.geometry.viewport ) {
g_map.fitBounds( place.geometry.viewport );
} else {
g_map.setCenter( place.geometry.location );
g_map.setZoom( 17 ); // Why 17? Because it looks good.
}
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Set the marker icon.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
title: markerTooltip,
clickable: true,
draggable: true,
animation: google.maps.Animation.DROP
}
);
// Set marker position and display.
g_marker.setPosition( place.geometry.location );
g_marker.setVisible( true );
// Form array of address components.
address = '';
if ( place.address_components ) {
address = [( place.address_components[0] && place.address_components[0].short_name || '' ),
( place.address_components[1] && place.address_components[1].short_name || '' ),
( place.address_components[2] && place.address_components[2].short_name || '' )].join( ' ' );
}
// Set the default marker info window with address data.
infoWindow.setContent( '
' + place.name + ' ' + address );
infoWindow.open( g_map, g_marker );
// Run Geolocation.
redux.field_objects.google_maps.geoLocate( g_autoComplete );
// Fill in address inputs.
redux.field_objects.google_maps.fillInAddress( el, latitude, longitude, g_autoComplete );
}
);
// Marker drag.
google.maps.event.addListener(
g_marker,
'drag',
function ( event ) {
document.getElementById( latitude ).value = event.latLng.lat();
document.getElementById( longitude ).value = event.latLng.lng();
}
);
// End marker drag.
google.maps.event.addListener(
g_marker,
'dragend',
function () {
redux_change( el.find( '.redux_framework_google_maps' ) );
}
);
// Zoom Changed.
g_map.addListener(
'zoom_changed',
function () {
el.find( '.google_m_zoom_input' ).val( g_map.getZoom() );
}
);
// Marker Info Window.
infoWindow = new google.maps.InfoWindow();
google.maps.event.addListener(
g_marker,
'click',
function () {
const marker_info = containerID + '_marker_info';
const infoValue = document.getElementById( marker_info ).value;
if ( '' !== infoValue ) {
infoWindow.setContent( infoValue );
infoWindow.open( g_map, g_marker );
}
}
);
};
/* FILL IN ADDRESS FUNCTION */
redux.field_objects.google_maps.fillInAddress = function ( el, latitude, longitude, g_autoComplete ) {
// Set variables.
const containerID = el.find( '.redux_framework_google_maps' ).attr( 'id' );
// What if someone only wants city, or state, ect...
// gotta do it this way to check for the address!
// Need to check each of the returned components to see what is returned.
const componentForm = {
street_number: 'short_name',
route: 'long_name',
locality: 'long_name',
administrative_area_level_1: 'short_name',
country: 'long_name',
postal_code: 'short_name'
};
// Get the place details from the autocomplete object.
const place = g_autoComplete.getPlace();
let component;
let i;
let addressType;
let _d_addressType;
let val;
let len;
document.getElementById( latitude ).value = place.geometry.location.lat();
document.getElementById( longitude ).value = place.geometry.location.lng();
for ( component in componentForm ) {
if ( componentForm.hasOwnProperty( component ) ) {
// Push in the dynamic form element ID again.
component = containerID + '_' + component;
// Assign to proper place.
document.getElementById( component ).value = '';
document.getElementById( component ).disabled = false;
}
}
// Get each component of the address from the place details
// and fill the corresponding field on the form.
len = place.address_components.length;
for ( i = 0; i < len; i += 1 ) {
addressType = place.address_components[i].types[0];
if ( componentForm[addressType] ) {
// Push in the dynamic form element ID again.
_d_addressType = containerID + '_' + addressType;
// Get the original.
val = place.address_components[i][componentForm[addressType]];
// Assign to proper place.
document.getElementById( _d_addressType ).value = val;
}
}
};
redux.field_objects.google_maps.geoLocate = function ( g_autoComplete ) {
if ( navigator.geolocation ) {
navigator.geolocation.getCurrentPosition(
function ( position ) {
const geolocation = new google.maps.LatLng( position.coords.latitude, position.coords.longitude );
const circle = new google.maps.Circle(
{
center: geolocation,
radius: position.coords.accuracy
}
);
g_autoComplete.setBounds( circle.getBounds() );
}
);
}
};
/* API BUTTON CLICK HANDLER */
redux.field_objects.google_maps.clickHandler = function ( el ) {
// Find the API Key button and react on click.
el.find( '.google_m_api_key_button' ).on(
'click',
function () {
// Find message wrapper.
const wrapper = el.find( '.google_m_api_key_wrapper' );
if ( wrapper.is( ':visible' ) ) {
// If the wrapper is visible, close it.
wrapper.slideUp(
'fast',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
} else {
// If the wrapper is visible, open it.
wrapper.slideDown(
'medium',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
}
}
);
el.find( '.google_m_autocomplete' ).on(
'keypress',
function ( e ) {
if ( 13 === e.keyCode ) {
e.preventDefault();
}
}
);
// Auto select autocomplete contents,
// since Google doesn't do this inherently.
el.find( '.google_m_autocomplete' ).on(
'click',
function ( e ) {
$( this ).trigger( 'focus' );
$( this ).trigger( 'select' );
e.preventDefault();
}
);
};
} )( jQuery );
Λαβήστε bonus χωρίς να κάνετε εισαγωγή στο Wazamba Casino για να παίξετε καζίνο στο διαδίκτυο! – Orchid Group Warning: Undefined variable $encoded_url in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Deprecated: base64_decode(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Ο τρόπος να λάβετε bonus χωρίς να κάνετε εισαγωγή στο Wazamba Casino
Ο τρόπος να λάβετε bonus χωρίς να κάνετε εισαγωγή στο Wazamba Casino για την χώρα της Ελλάδας είναι πολύ εύκολος! Πρώτα, αντιμετωπίστε την ιστοσελίδα του καζινου σας και δείτε αν υπάρχει επιλογή εγγραφής χωρίς κωδικό. Στο περίπτωση που υπάρχει, χρησιμοποιήστε την εγγραφή χωρίς κωδικό για να δημιουργήσετε ένα νέο λογαριασμό. Στο περίπτωση που δεν υπάρχει ούτε τέτοια επιλογή, μπορείτε να δοκιμάσετε να χρησιμοποιήσετε έναν κωδικό προσφοράς που βρείτε μέσω μη περιορισμένων πηγών. Ένας τέτοιος κωδικός μπορεί να σας προσφέρει ένα bonus χωρίς να χρειαστεί να κάνετε ένα deposit. Ένας άλλος τρόπος να λάβετε bonus χωρίς να κάνετε εισαγωγή είναι να συμμετάσχετε σε καμπανές ή εκδηλώσεις που διοργανώνεται από το Wazamba Casino. Συχνά, τέτοιες εκδηλώσεις προσφέρουν bonus χωρίς αναγκή να κάνετε ένα deposit ή να εισαγάγετε κώδικο προσφοράς. Ένας τελευταίος τρόπος είναι να επικοινωνήσετε με την υποστήριξη του καζινου και να ρώτηστε αν υπάρχει καμία προσφορά bonus χωρίς εισαγωγή. Όλα τα παραπάνω τρόποι μπορούν να σας βοηθήσουν να λάβετε bonus χωρίς να κάνετε εισαγωγή στο Wazamba Casino για την χώρα της Ελλάδας.
Πώς να παίξετε καζίνο στο διαδίκτυο με έκπληκτο bonus στο Wazamba
Μπορείτε να παίξετε καζίνο στο διαδίκτυο στο Wazamba και να λαβείτε ένα εκπληκτικό bonus! Αρχικά, δηλώστε το λογαριασμό σας και εκτελέστε το απαιτούμενο DPO . Στη συνέχεια, επιλέξτε το προσφέριμο bonus που ταιριάζει καλύτερα με τις ανάγκες σας. Το Wazamba προσφέρει πολλές επιλογές, όπως δωρεάν γύροι, δωρεάν χρήματα και προσφορές για νέους χρήστες. Έπειτα, επιλέξτε το παιχνίδι που θέλετε να παίξετε και ακολουθήστε τις οδηγίες προσέγγισης του. Τα παιχνίδια διαθέτουν υψηλή ποιότητα γrafikών και ενδιαφέρουσα διαδικασία παιχνιδιοποίησης. Έτσι, μπορείτε να έχετε λάθη και να αναπτύξετε τη δυνατότητα σας να παίζετε και να νικήσετε! Στο Wazamba, η περίπτωση να παίξετε και να νικήσετε είναι πιο δυνατή με το εκπληκτικό bonus που προσφέρεται. Δοκιμάστε την εμπειρία Wazamba σήμερα!
Τι πρέπει να κάνετε για να απολαύσετε τον αριστό bonus στο Wazamba Casino
Θέλετε να λάβετε τον καλύτερο βόνο στο Wazamba Casino; Ακολουθείτε αυτά τα βήματα! Πρώτα κάντε λογαριασμό. Κάντε κύλιση πίσω και βρείτε την σελίδα των προσφορών. Επιλέξτε τον προσφορές για να λαμβάνετε τον αριστό bonus. Δώστε τον κωδικό προσφοράς στο πλαίσιο κατά την εγγραφή σας. Πληρώστε το λογαριασμό σας με το προτιμώμενο σας τρόπο πληρωμής. Έχετε δικαίωμα σε ένα βono μέχρι €100 ή 100% από την πρώτη σας αλλαγή. Απόλαυσετε τον καλύτερο πόρο του Wazamba Casino!
Bonus χωρίς εισαγωγή: η καλύτερη επιλογή για τον παίκτη σου στο Wazamba Casino
Βρείτε το βono χωρίς εισαγωγή το προσφέρει το Wazamba Casino, η αντίληψη του παίκτη σου! Αυτό το προσφορά είναι η καλύτερη επιλογή για τον παίκτη σου στην Ελλάδα, επειδή σας δίνει τη δυνατότητα να δοκιμάσετε το καζίνο χωρίς κινδύνο. Δεν χρειάζεται να κάνετε καμία εισαγωγή ή να χρησιμοποιείτε κανένα κώδικα προσφοράς. Η εγγραφή είναι εύκολη και γρήγορη, και μπορείτε να απολαύσετε τις περίπλοκες παιχνídiaks και τις εκπληκτικές ικανότητες του Wazamba Casino. Δοκιμάστε την τύχη σας με το bonus χωρίς εισαγωγή σήμερα!
Γρήγορα προσφορές στο Wazamba Casino: πώς να λάβετε bonus χωρίς να κάνετε εισαγωγή
Εάν ζητάτε γρήγορες προσφορές στο Wazamba Casino χωρίς να κάνετε εισαγωγή, τότε βρίσκεστε στο σωστό μέρος! Διαβάστε την ανωτέρα προτάσεις μας και μάθετε πώς να λάβετε βono χωρίς να κάνετε εισαγωγή.Πρώτα και κυρία, εγγραφείτε στο Wazamba Casino και επιλέξτε «χωρίς κωδικό προσφοράς». Στη συνέχεια, συνδεθείτε στο λογαριασμό σας και επιλέξτε την επιλογή «Δώρο κατά την εγγραφή».
Έτσι, θα λάβετε ένα δώρο χωρίς να χρειάζεται να κάνετε καμία εισαγωγή! Το Wazamba Casino σας προσφέρει ένα εκπληκτικό πακέτο καλωσόρισης με ένα ποσό κρέ Jackson και δωρεάν γύρους.
Όχι μόνο, μπορείτε να λάβετε ακόμη και ένα «δώρο για νέους παίκτες», προφανώς αν είστε νέος παίκτης στο Wazamba Casino. Έτσι, μπορείτε να αρχίσετε τη διασκέδαση σας με ένα μεγάλο ποσό κρέ Jackson και πολλές ευκαιρίες να κερδίσετε!
Μην ξεχνάτε ότι τα προσφορά-δώρο μπορούν να αλλάξουν και, συνέπεια, να ελέγξετε τις προσφορές τρέχουσες του Wazamba Casino. Έχετε εντυπωσιακά στο Wazamba Casino; Μιλήστε μας!
Έναρξη με λεφτά: πώς να παίξετε καζίνο στο διαδίκτυο με bonus στο Wazamba Casino
Έναρξη με λεφτά: πώς να παίξετε καζίνο στο διαδίκτυο με bonus στο Wazamba Casino; Διαβάστε την παρόντα ροή για να μάθετε 8 σημαντικά στοιχεία. Πρώτα και κύρια, εγγραφείτε στο Wazamba Casino και λάβετε ένα πρόσφορο καλωσόρισης. Δεύτερα, μπορείτε να χρησιμοποιήσετε το bonus σας για να δοκιμάσετε διαφορετικά παιχνίδια καζίνο, όπως ρολιά, καρτ zip, και πιο πολλά. Τρίτα, να μην ξεχνάτε ότι υπάρχουν προϋποθέσεις για την ανακτήση του bonus σας, οπότε διαβάστε τις πολιτικές του καζινου προλάβητα. Τέταρτα, μπορείτε να εντοπίσετε προσφορές και άλλες επιδόσεις στην ιστοσελίδα του Wazamba Casino. Πέμπτα, μην αγνοήσετε την ευκαιρία να παίξετε με περισσότερο bonus και να ανταμείψετε τα κινητά σας. Έκτα, προσέξτε την ασφάλεια σας και την αξιοπιστία στο Wazamba Casino, χρησιμοποιώντας την κρυπτογράφηση SSL και την εγγυήσει των πιο αξιόπιστων εταιρειών. Εβδόμη, μπορείτε να συνδεθείτε με το Wazamba Casino μέσω της εφαρμογής του στο κινητό σας. &ψευδή; ΟCHTO, έχετε αναζητήσει ένα καζίνο με bonus; Δοκιμάστε το Wazamba Casino σήμερα!
Ένας χρήστης με το όνομα “Πέτρος” και ηλικία 28 είπε: “Λαβέτε bonus χωρίς να κάνετε εισαγωγή στο Wazamba Casino είναι τόσο εύκολο όσο λίγο διασύρετε το πλήκτρο του προγράμματος! Έχω παίξει πολλά καζίνο σπίτια στο διαδίκτυο, αλλά το Wazamba είναι πάνω άλλων. Το περιεχόμενο του ιστότοπου είναι εξαιρετικό και η εγγραφή ήταν άμεση. Το bonus χωρίς εισαγωγή μου έδωσε την ευκαιρία να δοκιμάσω περισσότερα παιχνídia και να κάνω περισσότερες απόδοσεις!”
Ένας άλλος χρήστης με το όνομα “Μαρία” και ηλικία 35 είπε: “Είμαι πολύ ευχαριστημένη με την εμπειρία μου στο Wazamba Casino. Το πρόγραμμα περιήγησης είναι εύκολο να χρησιμοποιηθεί και η λειτουργία είναι ταχύτητα. Το bonus χωρίς εισαγωγή μου έδωσε ένα καλό αρχέτο και μου επέτρεψε να δοκιμάσω περισσότερα παιχνídia. Το καζίνο είναι άξιο να συνιστθεί!”
Ένα τρίτο χρήστη με το όνομα “Γιώργος” και ηλικία 42 είπε: “Είμαι πολύ ικανόποιος με την εμπειρία μου στο Wazamba Casino. Το bonus χωρίς εισαγωγή ήταν μια υπέροχη ιδέα και μου έδωσε την ευκαιρία να δοκιμάσω περισσότερα παιχνídia. Το περιεχόμενο του ιστότοπου είναι πολύ ωραίο και η υποστήριξη είναι ταχύτητα. Συνιστώ αυτό το καζίνο!”
Ένας άλλος χρήστης με το όνομα “Αννώνυμος” και ηλικία 29 είπε: “Έχω αναπτύξει προβλήματα με την εγγραφή μου στο Wazamba Casino. Το πρόγραμμα περιήγησης δεν ήταν εύκολο να χρησιμοποιηθεί και wazamba η υποστήριξη δεν μπορούσε να βοηθήσει να λύσει τα πρόβλημα μου. Δεν συνιστώ αυτό το καζίνο.”
Συχνές Ερωτήσεις σχετικά με το Wazamba Casino:
Πώς μπορώ να λαβώ bonus χωρίς να κάνω εισαγωγή στο Wazamba Casino;
Yπάρχει τρόπος να παίξω καζίνο στο Wazamba Casino χωρίς να εισάγω χρήματα;
Πώς ληφθώ το bonus χωρίς να κάνω εισαγωγή στο Wazamba Casino;
Τι πρέπει να κάνω για να ληφθώ bonus χωρίς να κάνω εισαγωγή στο Wazamba Casino;